package com.woniuxy.dao;

import com.woniuxy.entity.Sort;
import com.woniuxy.entity.Staff;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author lyy
 * @version 1.0
 * @date 2021/5/21 20:41
 */
public interface SortDao {


    /**
     * 通过ID查询单条数据
     *
     * @param sortId 主键
     * @return 实例对象
     */
    Staff queryById(Integer sortId);

    /**
     * 通过实体作为筛选条件查询
     *
     * @param sort 实例对象
     * @return 对象列表
     */
    List<Sort> search(Sort sort);

    /**
     * 新增数据
     *
     * @param sort 实例对象
     * @return 影响行数
     */
    int insert(Sort sort);

    /**
     * 修改数据
     *
     * @param sort 实例对象
     * @return 影响行数
     */
    int update(Sort sort);

    /**
     * 通过主键软删除数据
     *
     * @param sortId 主键
     * @return 影响行数
     */
    int deleteById(Integer sortId);


    /**
     * 查询轮循顺序和状态
     *
     * @param
     * @return 对象列表
     */
    List<Sort> searchround();

    /**
     * 查询所有可以被点的人和状态
     *
     * @param
     * @return 对象列表
     */
    List<Sort> searchAllorders();

    /**
     * 查询空闲的人是否存在
     *
     * @param
     * @return 对象列表
     */
    Integer sortcountexit();

    /**
     *空闲的第一个人,轮循的默认
     * 查询默认(轮循状态下工作的人)
     *
     * @param
     * @return 对象列表
     */
    Sort searchfirst();

    /**
     * 轮循默认的开始进行工作状态
     * 修改`staff`(`staff_status`)数据
     *
     * @param  sortStaffid 实例对象
     * @return 影响行数
     */
    Integer updatebeginstatus(Integer sortStaffid);

    /**
     * 轮循默认的进行工作的顺序
     * 修改`sort`(sort_order)数据
     *
     * @param  sortStaffid 实例对象
     * @return 影响行数
     */
    Integer updatebeginorder(Integer sortStaffid);


    /**
     * 点技师
     * (当被点了之后(工作中)依然可以被点)
     * 修改`staff`(`staff_status`)数据
     *
     * @param  staffId 实例对象
     * @return 影响行数
     */
    void updateorder(Integer staffId);

    /**
     * 修改轮循默认的完成工作状态
     * 修改`staff`(`staff_status`)为0
     *
     * @param  staffId 实例对象
     * @return 影响行数
     */
    void updatefinishstatus(Integer staffId);

    /**
     * 修改轮循默认的完成工作顺序
     * 获取MAX(`sort_order`)+1
     *
     * @param
     * @return 影响行数
     */
    Integer maxorder ();

    /**
     * 修改轮循默认的完成工作后排序
     * 修改`sort`(`sort_order`)为最大加1
     *
     * @param  sortStaffid ,sortOrder
     * @return 影响行数
     */
    void updatefinishorder(Integer sortStaffid,Integer sortOrder);

}
